import sys

def solve():
    """解决单个测试用例的函数"""
    try:
        # # 从标准输入读取 n 和 s
        # n_str = sys.stdin.readline()
        # if not n_str:
        #     return
        # n = int(n_str)
        # s = sys.stdin.readline().strip()
        s = "())("

        # balance 用于追踪当前前缀中 '(' 和 ')' 的平衡度
        balance = 0
        # swaps 记录需要的最少交换次数
        swaps = 0

        # 遍历字符串中的每个字符
        for char in s:
            if char == '(':
                # 遇到左括号，平衡度增加
                balance += 1
            else:
                # 遇到右括号，平衡度减少
                balance -= 1

            # 如果平衡度变为负数，说明当前前缀中右括号过多
            # 这是一个不平衡的状态，必须通过一次交换来修复
            if balance < 0:
                # 增加一次交换次数
                swaps += 1
                # 关键修正：将平衡度调整为 +2，以模拟将当前问题 ')' 替换为 '(' 的效果
                # 例如，如果 balance 从 0 变为 -1，现在应该调整为 1 (即 0 - 1 + 2)
                balance += 2

        # 输出结果
        sys.stdout.write(str(swaps) + '\n')

    except (IOError, ValueError):
        # 处理可能的输入结束或格式错误
        return
solve()
# def main():
#     """主函数，处理多组测试数据"""
#     try:
#         # 读取测试数据组数 T
#         t_str = sys.stdin.readline()
#         if not t_str:
#             return
#         T = int(t_str)
#
#         # 循环处理每一组测试数据
#         for _ in range(T):
#             solve()
#
#     except (IOError, ValueError):
#         # 处理可能的输入结束或格式错误
#         return
#
# if __name__ == "__main__":
#     main()
#
